package com.yqxc.folkspace.controller;

import com.alibaba.fastjson.JSONObject;
import com.yqxc.folkspace.util.FileUtil;
import com.yqxc.folkspace.util.KeyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * @author 元启星辰（北京）科技有限公司
 * @describe FISCO BCOS 密钥控制层：EC密钥对生成，签名，验签
 * @date 2021-12-25
 */
@RestController
public class KeyController {

    // 自动注入Key工具类
    @Autowired
    private KeyUtil keyUtil;

    // 文件工具类
    @Autowired
    private FileUtil fileUtil;


    /**
     * 获取密钥对
     * 返回下载文件流
     *
     * @return 密钥对+地址的JSON字符串的文件流
     */
    @GetMapping("/getKeyPair")
    public void getKeyPair(HttpServletResponse response) {

        JSONObject resultJson = keyUtil.generateKey();

        fileUtil.downloadFile(response, resultJson.getString("address"), resultJson.toJSONString());
    }

    /**
     * 获取签名数据
     * 返回下载文件流
     *
     * @param response        MVC返回
     * @param dataWithOutSign 需要签名的字符串
     * @param privateKey      密钥字符串
     * @return 签名生成的字符串的文件流
     */
    @PostMapping("/getSignData")
    public void getSignData(HttpServletResponse response, @RequestParam("dataWithOutSign") String dataWithOutSign, @RequestParam("privateKey") String privateKey) {

        String signData = keyUtil.signData(dataWithOutSign, privateKey);

        fileUtil.downloadFile(response, "finishSignData", signData);
    }

    /**
     * 获取验签结果
     *
     * @param data publicKey 公钥字符串
     * @param data message   需要签名的字符串
     * @param data signature 签名生成的字符串
     * @return 验签bool结果
     */
    @PostMapping("/verifyData")
    public boolean verifyData(@RequestBody Map<String, String> data) {

        return keyUtil.verifyData(data.get("publicKey"), data.get("message"), data.get("signature"));
    }

}
